how stream works internally in java 8